home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------------
-
- prefsdlog.c
-
- This module handles the preferences dialog.
-
- Copyright © 1994, Northwestern University.
-
- ----------------------------------------------------------------------------*/
-
- #include <stdio.h>
- #include <string.h>
- #include <Packages.h>
- #include <Aliases.h>
- #include <Processes.h>
-
- #include "glob.h"
- #include "prefsdlog.h"
- #include "dialog.h"
- #include "popuputil.h"
- #include "sfutil.h"
- #include "log.h"
- #include "news.h"
- #include "newswatcher.h"
- #include "strutil.h"
- #include "full.h"
- #include "drawutil.h"
- #include "memutil.h"
- #include "fileutil.h"
- #include "apputil.h"
- #include "resutil.h"
- #include "menus.h"
- #include "url.h"
- #include "ic.h"
-
-
-
- /* Items common to all topics. The kInit and kTerm items are pseudo-items
- used to intialize and terminate the topics. The OK and Cancel buttons
- are also common to all topics (item numbers 1 and 2). Items 3 through
- 7 are user items to draw the 5 segments of the gray outline. Item 8
- is the topic popup menu. Item 9 is the user item to outline the OK
- button. */
-
- #define kInit 100
- #define kTerm 101
- #define kFirstGrayLine 3
- #define kLastGrayLine 7
- #define kTopicPopup 8
- #define kCommonItems 9
-
- /* Prefs dialog and DITL resources */
-
- #define kPrefsDlg 300
- #define kNewsreadingOptions 1
- #define kServerAddresses 2
- #define kServerOptions 3
- #define kPersonalInfo 4
- #define kSignature 5
- #define kMessageOptions 6
- #define kExtraHeaderLines 7
- #define kRemoteHost 8
- #define kScreenFonts 9
- #define kPrintingFont 10
- #define kSavedUserGroupLists 11
- #define kSavedArticles 12
- #define kSavedMessages 13
- #define kURLHelpers1 14
- #define kURLHelpers2 15
- #define kAuthentication 16
- #define kExtractBinaries 17
- #define kMiscOptions 18
-
- /* Newsreading options topic. */
-
- #define kShowAuthors (kCommonItems + 1)
- #define kShowArtHeaders (kCommonItems + 2)
- #define kCollapseThreads (kCommonItems + 3)
- #define kKeyboardShortcuts (kCommonItems + 4)
- #define kKeypadShortcuts (kCommonItems + 5)
- #define kReuseArticleWinds (kCommonItems + 6)
- #define kReturnToSubjectWindow (kCommonItems + 7)
- #define kBeepAtEndOfGroup (kCommonItems + 8)
- #define kMaxArticles (kCommonItems + 10)
-
- /* Server info topic. */
-
- #define kNewsServer (kCommonItems + 3)
- #define kMailServer (kCommonItems + 5)
-
- /* Server options topic. */
-
- #define kBatchedGroupCmds (kCommonItems + 2)
- #define kUseXPAT (kCommonItems + 3)
- #define kNoNewConnection (kCommonItems + 4)
- #define kNoModeReader (kCommonItems + 5)
-
- /* Personal info topic. */
-
- #define kFullName (kCommonItems + 3)
- #define kOrganization (kCommonItems + 5)
- #define kMailAddress (kCommonItems + 7)
-
- /* Signature topic. */
-
- #define kSigStaticText (kCommonItems + 1)
- #define kSignatureEditText (kCommonItems + 2)
- #define kAddSigBlankLine (kCommonItems + 3)
- #define kAddSigSeparator (kCommonItems + 4)
-
- /* Message options topic. */
-
- #define kMsgReplyPost (kCommonItems + 1)
- #define kMsgReplyEmail (kCommonItems + 2)
- #define kMsgCopySelf (kCommonItems + 3)
- #define kMsgShowMsgDetails (kCommonItems + 4)
- #define kMsgWrapOnSend (kCommonItems + 5)
- #define kMsgTabEnabled (kCommonItems + 6)
- #define kMsgTabStops (kCommonItems + 8)
- #define kMsgQuoteString (kCommonItems + 10)
-
- /* Extra header lines topic */
-
- #define kMsgExtraNewsHdrLines (kCommonItems + 2)
- #define kMsgExtraMailHdrLines (kCommonItems + 4)
-
- /* Remote host info topic. */
-
- #define kRemoteHostAddr (kCommonItems + 3)
- #define kRemoteLogin (kCommonItems + 5)
- #define kRemotePassword (kCommonItems + 7)
- #define kRemotePath (kCommonItems + 9)
- #define kAutoGetPut (kCommonItems + 10)
- #define kSavePassword (kCommonItems + 11)
-
- /* Screen fonts topic. */
-
- #define kListFontPopup (kCommonItems + 2)
- #define kListSizeBox (kCommonItems + 4)
- #define kListSizePopup (kCommonItems + 5)
- #define kListSample (kCommonItems + 6)
- #define kListVertLine (kCommonItems + 7)
- #define kTextFontPopup (kCommonItems + 9)
- #define kTextSizeBox (kCommonItems + 11)
- #define kTextSizePopup (kCommonItems + 12)
- #define kTextSample (kCommonItems + 13)
-
- /* Printing font topic. */
-
- #define kPrintingFontPopup (kCommonItems + 1)
- #define kPrintingSizeBox (kCommonItems + 3)
- #define kPrintingSizePopup (kCommonItems + 4)
- #define kPrintingSample (kCommonItems + 5)
-
- /* Saved user group lists topic. */
-
- #define kSavedUGLDirCheckBox (kCommonItems + 1)
- #define kSavedUGLDirBorder (kCommonItems + 2)
- #define kSavedUGLDirName (kCommonItems + 3)
- #define kSavedUGLDirButton (kCommonItems + 4)
- #define kSavedUGLAutoSaveOnQuit (kCommonItems + 5)
-
- /* Saved articles topic. */
-
- #define kSavedArtAppBorder (kCommonItems + 2)
- #define kSavedArtAppName (kCommonItems + 3)
- #define kSavedArtAppButton (kCommonItems + 4)
- #define kSavedArtDirCheckBox (kCommonItems + 5)
- #define kSavedArtDirBorder (kCommonItems + 6)
- #define kSavedArtDirName (kCommonItems + 7)
- #define kSavedArtDirButton (kCommonItems + 8)
- #define kSavedArtSepFiles (kCommonItems + 9)
- #define kSavedArtAutoAppend (kCommonItems + 10)
- #define kSavedArtSaveEncoded (kCommonItems + 11)
-
- /* Saved messages topic. */
-
- #define kSavedMsgDirCheckBox (kCommonItems + 1)
- #define kSavedMsgDirBorder (kCommonItems + 2)
- #define kSavedMsgDirName (kCommonItems + 3)
- #define kSavedMsgDirButton (kCommonItems + 4)
- #define kSavedMsgDelAfterSend (kCommonItems + 5)
-
- /* URL helper programs 1 topic. */
-
- #define kFTPAppBorder (kCommonItems + 1)
- #define kFTPAppName (kCommonItems + 2)
- #define kFTPAppButton (kCommonItems + 3)
- #define kHTTPAppBorder (kCommonItems + 5)
- #define kHTTPAppName (kCommonItems + 6)
- #define kHTTPAppButton (kCommonItems + 7)
- #define kGopherAppBorder (kCommonItems + 9)
- #define kGopherAppName (kCommonItems + 10)
- #define kGopherAppButton (kCommonItems + 11)
- #define kWAISAppBorder (kCommonItems + 13)
- #define kWAISAppName (kCommonItems + 14)
- #define kWAISAppButton (kCommonItems + 15)
-
- /* URL helper programs 2 topic. */
-
- #define kTelnetAppBorder (kCommonItems + 1)
- #define kTelnetAppName (kCommonItems + 2)
- #define kTelnetAppButton (kCommonItems + 3)
- #define ktn3270AppBorder (kCommonItems + 5)
- #define ktn3270AppName (kCommonItems + 6)
- #define ktn3270AppButton (kCommonItems + 7)
- #define kFingerAppBorder (kCommonItems + 9)
- #define kFingerAppName (kCommonItems + 10)
- #define kFingerAppButton (kCommonItems + 11)
- #define kWhoisAppBorder (kCommonItems + 13)
- #define kWhoisAppName (kCommonItems + 14)
- #define kWhoisAppButton (kCommonItems + 15)
-
- /* Authentication topic. */
-
- #define kAuthUsername (kCommonItems + 3)
- #define kAuthPassword (kCommonItems + 5)
- #define kAuthSavePassword (kCommonItems + 6)
- #define kAuthPrivateGroups (kCommonItems + 7)
- #define kAuthWhenRequested (kCommonItems + 8)
- #define kAuthAtStartup (kCommonItems + 9)
-
- /* Extracting Binaries topic. */
-
- #define kSavedBinDirCheckBox (kCommonItems + 1)
- #define kSavedBinDirBorder (kCommonItems + 2)
- #define kSavedBinDirName (kCommonItems + 3)
- #define kSavedBinDirButton (kCommonItems + 4)
- #define kHqxAppBorder (kCommonItems + 6)
- #define kHqxAppName (kCommonItems + 7)
- #define kHqxAppButton (kCommonItems + 8)
- #define kUUAppBorder (kCommonItems + 10)
- #define kUUAppName (kCommonItems + 11)
- #define kUUAppButton (kCommonItems + 12)
-
- /* Miscellaneous options topic. */
-
- #define kReZoomWindows (kCommonItems + 1)
- #define kCheckNewGroups (kCommonItems + 2)
- #define kAreYouSure (kCommonItems + 3)
- #define kLogActionsToFile (kCommonItems + 4)
- #define kDontCoverFinderIcons (kCommonItems + 5)
- #define kUseInternetConfig (kCommonItems + 6)
-
-
-
- static Str255 gStaticText; /* static text for signature dialog */
-
- static short gListFontID; /* current list font id */
- static short gListFontSize; /* current list font size */
- static short gTextFontID; /* current text font id */
- static short gTextFontSize; /* current text font size */
- static short gPrintingFontID; /* current printing font id */
- static short gPrintingFontSize; /* current printing font size */
-
- static Boolean gScreenFontsTopic; /* true if screen fonts topic, false if printing font topic */
-
- static FileFilterYDUPP gInvisibleFilesFilterUPP = nil;
- static UserItemUPP gDrawFontSampleUPP = nil;
-
-
-
- /*----------------------------------------------------------------------------
- ValidHelper
-
- Check for a valid helper program.
-
- Entry: fSpec = pointer to helper program file spec.
-
- Exit: function result = true if helper is valid.
- *fSpec = pointer to file spec for copy of helper program which
- will actually be used if duplicate copies of helper found.
- ----------------------------------------------------------------------------*/
-
- static Boolean ValidHelper (FSSpec *fSpec)
- {
- OSErr err = noErr;
- FInfo fInfo;
- FSSpec file;
- CStr255 fmt, msg;
-
- err = FSpGetFInfo(fSpec, &fInfo);
- if (err != noErr) goto exit1;
- if (fInfo.fdType != 'APPL') goto exit2;
- err = FindAppFromSig(fInfo.fdCreator, &file, nil, nil);
- if (err == fnfErr) goto exit3;
- if (err != noErr) goto exit1;
- if (!IsEqualFSSpec(fSpec, &file)) goto exit4;
- return true;
-
- exit1:
-
- GetCString(kStrUnexpectedErr, fmt);
- sprintf(msg, fmt, err);
- StopAlertMessage(msg);
- return false;
-
- exit2:
-
- StopAlertNumber(kStrNotAnApplication);
- return false;
-
- exit3:
-
- StopAlertNumber(kStrDesktopDatabaseDamaged);
- return true;
-
- exit4:
-
- CautionAlertNumber(kStrDuplicateCopiesOfHelper);
- *fSpec = file;
- return true;
- }
-
-
-
- /*----------------------------------------------------------------------------
- NewsreadingOptions
-
- Handle the newsreading options preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void NewsreadingOptions (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- long maxFetch;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kShowAuthors, prefs->showAuthors);
- DlgSetCheck(dlg, kShowArtHeaders, prefs->showArtHeaders);
- DlgSetCheck(dlg, kCollapseThreads, prefs->showThreadsCollapsed);
- DlgSetCheck(dlg, kKeyboardShortcuts, prefs->keyboardShortcuts);
- DlgSetCheck(dlg, kKeypadShortcuts, prefs->keypadShortcuts);
- DlgSetCheck(dlg, kReuseArticleWinds, prefs->reuseArticleWinds);
- DlgSetCheck(dlg, kReturnToSubjectWindow, prefs->returnToSubjectWindow);
- DlgSetCheck(dlg, kBeepAtEndOfGroup, prefs->beepAtEndOfGroup);
- DlgSetNumber(dlg, kMaxArticles, prefs->maxFetch);
- SetItemNumeric(dlg, kMaxArticles);
- SetItemMaxLength(dlg, kMaxArticles, 5);
- SelectDialogItemText(dlg, kMaxArticles, 0, 0x7fff);
- break;
-
- case kTerm:
-
- prefs->showAuthors = DlgGetCheck(dlg, kShowAuthors);
- prefs->showArtHeaders = DlgGetCheck(dlg, kShowArtHeaders);
- prefs->showThreadsCollapsed = DlgGetCheck(dlg, kCollapseThreads);
- prefs->keyboardShortcuts = DlgGetCheck(dlg, kKeyboardShortcuts);
- prefs->keypadShortcuts = DlgGetCheck(dlg, kKeypadShortcuts);
- prefs->reuseArticleWinds = DlgGetCheck(dlg, kReuseArticleWinds);
- prefs->returnToSubjectWindow = DlgGetCheck(dlg, kReturnToSubjectWindow);
- prefs->beepAtEndOfGroup = DlgGetCheck(dlg, kBeepAtEndOfGroup);
- maxFetch = DlgGetNumber(dlg, kMaxArticles);
- if (maxFetch > 15000) maxFetch = 15000;
- if (maxFetch <= 0) maxFetch = 1;
- prefs->maxFetch = maxFetch;
- break;
-
- case kShowAuthors:
- case kShowArtHeaders:
- case kCollapseThreads:
- case kKeyboardShortcuts:
- case kKeypadShortcuts:
- case kReuseArticleWinds:
- case kReturnToSubjectWindow:
- case kBeepAtEndOfGroup:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Server
-
- Handles the server info preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Server (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- Boolean enable;
-
- switch (item) {
-
- case kInit:
-
- DlgSetPString(dlg, kNewsServer, prefs->newsServerName);
- SetItemHostAddress(dlg, kNewsServer);
- SetItemMaxLength(dlg, kNewsServer, 255);
- DlgSetPString(dlg, kMailServer, prefs->mailServerName);
- SetItemHostAddress(dlg, kMailServer);
- SetItemMaxLength(dlg, kMailServer, 255);
- if (*prefs->newsServerName == 0) {
- SelectDialogItemText(dlg, kNewsServer, 0, 0);
- } else if (*prefs->mailServerName == 0) {
- SelectDialogItemText(dlg, kMailServer, 0, 0);
- } else {
- SelectDialogItemText(dlg, kNewsServer, 0, 0x7fff);
- }
- break;
-
- case kTerm:
-
- break;
-
- case kNewsServer:
- case kMailServer:
-
- DlgGetPString(dlg, kNewsServer, prefs->newsServerName);
- DlgGetPString(dlg, kMailServer, prefs->mailServerName);
- enable = *prefs->newsServerName != 0 && *prefs->mailServerName != 0;
- DlgEnableItem(dlg, ok, enable);
- DlgEnableItem(dlg, kTopicPopup, enable);
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- ServerOptions
-
- Handles the server options preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void ServerOptions (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kBatchedGroupCmds, prefs->batchedGroupCmds);
- DlgSetCheck(dlg, kUseXPAT, prefs->useXPAT);
- DlgSetCheck(dlg, kNoNewConnection, prefs->noNewConnection);
- DlgSetCheck(dlg, kNoModeReader, prefs->noModeReader);
- break;
-
- case kTerm:
-
- prefs->batchedGroupCmds = DlgGetCheck(dlg, kBatchedGroupCmds);
- prefs->useXPAT = DlgGetCheck(dlg, kUseXPAT);
- prefs->noNewConnection = DlgGetCheck(dlg, kNoNewConnection);
- prefs->noModeReader = DlgGetCheck(dlg, kNoModeReader);
- break;
-
- case kBatchedGroupCmds:
- case kUseXPAT:
- case kNoNewConnection:
- case kNoModeReader:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Personal
-
- Handles the personal info preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Personal (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- switch (item) {
-
- case kInit:
-
- DlgSetCString(dlg, kFullName, prefs->fullName);
- SetItemMaxLength(dlg, kFullName, 255);
- DlgSetCString(dlg, kOrganization, prefs->organization);
- SetItemMaxLength(dlg, kOrganization, 255);
- DlgSetCString(dlg, kMailAddress, prefs->emailAddress);
- SetItemUSAsciiNoBlank(dlg, kMailAddress);
- SetItemMaxLength(dlg, kMailAddress, 255);
- if (*prefs->fullName == 0) {
- SelectDialogItemText(dlg, kFullName, 0, 0);
- } else if (*prefs->organization == 0) {
- SelectDialogItemText(dlg, kOrganization, 0, 0);
- } else if (*prefs->emailAddress == 0) {
- SelectDialogItemText(dlg, kMailAddress, 0, 0);
- } else {
- SelectDialogItemText(dlg, kFullName, 0, 0x7fff);
- }
- break;
-
- case kTerm:
-
- DlgGetCString(dlg, kFullName, prefs->fullName);
- DlgGetCString(dlg, kOrganization, prefs->organization);
- break;
-
- case kMailAddress:
-
- DlgGetCString(dlg, kMailAddress, prefs->emailAddress);
- DlgEnableItem(dlg, ok, *prefs->emailAddress != 0);
- DlgEnableItem(dlg, kTopicPopup, *prefs->emailAddress != 0);
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Signature
-
- Handles the signature preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Signature (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- short len;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kAddSigBlankLine, prefs->addSigBlankLine);
- DlgSetCheck(dlg, kAddSigSeparator, prefs->addSigSeparatorLine);
- SetItemScrollingTextField(dlg, kSignatureEditText,
- gPrefs.textFont, gPrefs.textSize, false);
- DlgSetScrollingText(dlg, kSignatureEditText, prefs->signature,
- strlen(prefs->signature));
- DlgSetScrollingTextSelection(dlg, kSignatureEditText, 0, 0);
- SetItemMaxLength(dlg, kSignatureEditText, 4095);
- break;
-
- case kTerm:
-
- prefs->addSigBlankLine = DlgGetCheck(dlg, kAddSigBlankLine);
- prefs->addSigSeparatorLine = DlgGetCheck(dlg, kAddSigSeparator);
- DlgGetScrollingText(dlg, kSignatureEditText, prefs->signature, &len);
- prefs->signature[len] = 0;
- break;
-
- case kAddSigBlankLine:
- case kAddSigSeparator:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- MessageOptions
-
- Handles the message options preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void MessageOptions (TPrefRec *prefs, DialogPtr dlg, short item)
- {
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kMsgReplyPost, prefs->replyPost);
- DlgSetCheck(dlg, kMsgReplyEmail, prefs->replyEmail);
- DlgSetCheck(dlg, kMsgCopySelf, prefs->copySelf);
- DlgSetCheck(dlg, kMsgShowMsgDetails, prefs->showMsgDetails);
- DlgSetCheck(dlg, kMsgWrapOnSend, prefs->wrapOnSend);
- DlgSetCheck(dlg, kMsgTabEnabled, prefs->tabEnabled);
- DlgSetNumber(dlg, kMsgTabStops, prefs->tabStops);
- SetItemNumeric(dlg, kMsgTabStops);
- SetItemMaxLength(dlg, kMsgTabStops, 2);
- SelectDialogItemText(dlg, kMsgTabStops, 0, 0x7fff);
- DlgSetCString(dlg, kMsgQuoteString, prefs->quoteString);
- SetItemMaxLength(dlg, kMsgQuoteString, 10);
- break;
-
- case kTerm:
-
- prefs->replyPost = DlgGetCheck(dlg, kMsgReplyPost);
- prefs->replyEmail = DlgGetCheck(dlg, kMsgReplyEmail);
- prefs->copySelf = DlgGetCheck(dlg, kMsgCopySelf);
- prefs->showMsgDetails = DlgGetCheck(dlg, kMsgShowMsgDetails);
- prefs->wrapOnSend = DlgGetCheck(dlg, kMsgWrapOnSend);
- prefs->tabEnabled = DlgGetCheck(dlg, kMsgTabEnabled);
- prefs->tabStops = DlgGetNumber(dlg, kMsgTabStops);
- DlgGetCString(dlg, kMsgQuoteString, prefs->quoteString);
- break;
-
- case kMsgReplyPost:
- case kMsgReplyEmail:
- case kMsgCopySelf:
- case kMsgShowMsgDetails:
- case kMsgWrapOnSend:
- case kMsgTabEnabled:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- ExtraHeaderLines
-
- Handles the extra header lines preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void ExtraHeaderLines (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- short len;
-
- switch (item) {
-
- case kInit:
-
- SetItemScrollingTextField(dlg, kMsgExtraNewsHdrLines,
- gPrefs.textFont, gPrefs.textSize, false);
- DlgSetScrollingText(dlg, kMsgExtraNewsHdrLines, prefs->extraNewsHdrLines,
- strlen(prefs->extraNewsHdrLines));
- SetItemMaxLength(dlg, kMsgExtraNewsHdrLines, 255);
- SetItemScrollingTextField(dlg, kMsgExtraMailHdrLines,
- gPrefs.textFont, gPrefs.textSize, false);
- DlgSetScrollingText(dlg, kMsgExtraMailHdrLines, prefs->extraMailHdrLines,
- strlen(prefs->extraMailHdrLines));
- SetItemMaxLength(dlg, kMsgExtraMailHdrLines, 255);
- DlgSetScrollingTextSelection(dlg, kMsgExtraNewsHdrLines, 0, 0);
- break;
-
- case kTerm:
-
- DlgGetScrollingText(dlg, kMsgExtraNewsHdrLines, prefs->extraNewsHdrLines, &len);
- prefs->extraNewsHdrLines[len] = 0;
- DlgGetScrollingText(dlg, kMsgExtraMailHdrLines, prefs->extraMailHdrLines, &len);
- prefs->extraMailHdrLines[len] = 0;
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Remote
-
- Handles the remote host info preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Remote (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- CStr255 tempStr;
- short len;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCString(dlg, kRemoteHostAddr, prefs->ftpNewsrcHost);
- SetItemHostAddress(dlg, kRemoteHostAddr);
- SetItemMaxLength(dlg, kRemoteHostAddr, 255);
- DlgSetCString(dlg, kRemoteLogin, prefs->ftpNewsrcUsername);
- SetItemMaxLength(dlg, kRemoteLogin, 255);
- len = strlen(prefs->ftpNewsrcPassword);
- memset(tempStr, '•', len);
- tempStr[len] = 0;
- DlgSetCString(dlg, kRemotePassword, tempStr);
- SetItemPassword(dlg, kRemotePassword, prefs->ftpNewsrcPassword);
- SetItemMaxLength(dlg, kRemotePassword, 31);
- DlgSetCString(dlg, kRemotePath, prefs->ftpNewsrcPath);
- SetItemMaxLength(dlg, kRemotePath, 31);
- DlgSetCheck(dlg, kAutoGetPut, prefs->autoFetchNewsrc);
- DlgSetCheck(dlg, kSavePassword, prefs->saveFtpNewsrcPassword);
- if (*prefs->ftpNewsrcHost == 0) {
- SelectDialogItemText(dlg, kRemoteHostAddr, 0, 0);
- } else if (*prefs->ftpNewsrcUsername == 0) {
- SelectDialogItemText(dlg, kRemoteLogin, 0, 0);
- } else if (*prefs->ftpNewsrcPassword == 0) {
- SelectDialogItemText(dlg, kRemotePassword, 0, 0);
- } else if (*prefs->ftpNewsrcPath == 0) {
- SelectDialogItemText(dlg, kRemotePath, 0, 0);
- } else {
- SelectDialogItemText(dlg, kRemoteHostAddr, 0, 0x7fff);
- }
- break;
-
- case kTerm:
-
- DlgGetCString(dlg, kRemoteHostAddr, prefs->ftpNewsrcHost);
- DlgGetCString(dlg, kRemoteLogin, prefs->ftpNewsrcUsername);
- DlgGetCString(dlg, kRemotePath, prefs->ftpNewsrcPath);
- prefs->autoFetchNewsrc = DlgGetCheck(dlg, kAutoGetPut);
- prefs->saveFtpNewsrcPassword = DlgGetCheck(dlg, kSavePassword);
- break;
-
- case kSavePassword:
- case kAutoGetPut:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- DrawFontSample
-
- A user item procedure to draw the font samples.
-
- Entry: dlg = pointer to dialog.
- item = item number.
- ----------------------------------------------------------------------------*/
-
- static pascal void DrawFontSample (DialogPtr dlg, short item)
- {
- short itemType;
- Rect box;
- Handle itemHandle;
- Str255 text;
- short fontID, fontSize;
- TextStyle savedStyle;
-
- DlgGrayBorderItem(dlg, item);
- GetDialogItem(dlg, item, &itemType, &itemHandle, &box);
- if (gScreenFontsTopic) {
- if (item == kListSample) {
- GetPString(kStrGroupSubjectSample, text);
- fontID = gListFontID;
- fontSize = gListFontSize;
- } else {
- GetPString(kStrArtMsgSample, text);
- fontID = gTextFontID;
- fontSize = gTextFontSize;
- }
- } else {
- GetPString(kStrPrintingSample, text);
- fontID = gPrintingFontID;
- fontSize = gPrintingFontSize;
- }
- GetPortTextStyle(&savedStyle);
- TextFont(fontID);
- TextSize(fontSize);
- InsetRect(&box, 2, 2);
- TETextBox(text + 1, *text, &box, teFlushDefault);
- SetPortTextStyle(&savedStyle);
- }
-
-
-
- /*----------------------------------------------------------------------------
- RedrawSample
-
- Force one of the sample text items to be redrawn.
-
- Entry: dlg = pointer to dialog.
- item = item number.
- ----------------------------------------------------------------------------*/
-
- static void RedrawSample (DialogPtr dlg, short item)
- {
- short itemType;
- Handle itemHandle;
- Rect box;
-
- GetDialogItem(dlg, item, &itemType, &itemHandle, &box);
- InsetRect(&box, 2, 2);
- EraseRect(&box);
- InvalRect(&box);
- }
-
-
-
- /*----------------------------------------------------------------------------
- SetNewFont
-
- Set a new font in the font/size dialog.
-
- Entry: dlg = pointer to dialog.
- listFont = true if list font, false if text font.
- fontNum = new font number.
- ----------------------------------------------------------------------------*/
-
- static void SetNewFont (DialogPtr dlg, Boolean listFont, short fontNum)
- {
- short numItems, i;
- Str255 itemStr, fontName;
- ControlHandle ctl;
- long size;
-
- /* Select the right font in the font popup menu. */
-
- ctl = DlgGetControl(dlg,
- gScreenFontsTopic ? (listFont ? kListFontPopup : kTextFontPopup) : kPrintingFontPopup);
- GetFontName(fontNum, fontName);
- SetPopupValue(ctl, fontName, false);
-
- /* Adjust the size popup so the nice sizes are outlined. */
-
- ctl = DlgGetControl(dlg,
- gScreenFontsTopic ? (listFont ? kListSizePopup : kTextSizePopup) : kPrintingSizePopup);
- numItems = GetControlMaximum(ctl);
- for (i = 1; i <= numItems; i++) {
- GetPopupPString(ctl, i, itemStr);
- StringToNum(itemStr, &size);
- if (RealFont(fontNum, (short)size)) {
- SetPopupItemStyle(ctl, i, outline);
- } else {
- SetPopupItemStyle(ctl, i, 0);
- }
- }
-
- /* Force the sample text to be redrawn */
-
- RedrawSample(dlg,
- gScreenFontsTopic ? (listFont ? kListSample : kTextSample) : kPrintingSample);
- }
-
-
-
- /*----------------------------------------------------------------------------
- FontIDFromPopup
-
- Get the font ID corresponding the currently selected font in a popup menu.
-
- Entry: dlg = pointer to dialog.
- item = item number of popup menu.
- ----------------------------------------------------------------------------*/
-
- static short FontIDFromPopup (DialogPtr dlg, short item)
- {
- ControlHandle ctl;
- short fontNum;
- Str255 fontName;
-
- ctl = DlgGetControl(dlg, item);
- GetPopupPString(ctl, kCurrentPopupItem, fontName);
- GetFontNumber(fontName, &fontNum);
- return fontNum;
- }
-
-
-
- /*----------------------------------------------------------------------------
- ScreenFonts
-
- Handles the screen fonts preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void ScreenFonts (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- Str255 tempStr;
- long num;
-
- switch (item) {
-
- case kInit:
-
- gScreenFontsTopic = true;
- GetFontNumber(prefs->listFont, &gListFontID);
- gListFontSize = prefs->listSize;
- SetNewFont(dlg, true, gListFontID);
- DlgSetNumber(dlg, kListSizeBox, gListFontSize);
- SetItemNumeric(dlg, kListSizeBox);
- SetItemMaxLength(dlg, kListSizeBox, 2);
- SelectDialogItemText(dlg, kListSizeBox, 0, 0x7fff);
- SetItemPopupTypeinItem(dlg, kListSizePopup, kListSizeBox);
-
- GetFontNumber(prefs->textFont, &gTextFontID);
- gTextFontSize = prefs->textSize;
- SetNewFont(dlg, false, gTextFontID);
- DlgSetNumber(dlg, kTextSizeBox, gTextFontSize);
- SetItemNumeric(dlg, kTextSizeBox);
- SetItemMaxLength(dlg, kTextSizeBox, 2);
- SetItemPopupTypeinItem(dlg, kTextSizePopup, kTextSizeBox);
-
- DlgSetUserItem(dlg, kListSample, gDrawFontSampleUPP);
- DlgSetUserItem(dlg, kTextSample, gDrawFontSampleUPP);
- DlgSetUserItem(dlg, kListVertLine, gDlgGrayBorderItemUPP);
- break;
-
- case kTerm:
-
- GetFontName(gListFontID, prefs->listFont);
- GetFontName(gTextFontID, prefs->textFont);
- prefs->listSize = gListFontSize;
- prefs->textSize = gTextFontSize;
- break;
-
- case kListFontPopup:
-
- gListFontID = FontIDFromPopup(dlg, item);
- SetNewFont(dlg, true, gListFontID);
- break;
-
- case kTextFontPopup:
-
- gTextFontID = FontIDFromPopup(dlg, item);
- SetNewFont(dlg, false, gTextFontID);
- break;
-
- case kListSizePopup:
- case kListSizeBox:
-
- DlgGetPString(dlg, kListSizeBox, tempStr);
- StringToNum(tempStr, &num);
- if (num != 0 && num != gListFontSize) {
- gListFontSize = num;
- RedrawSample(dlg, kListSample);
- }
- break;
-
- case kTextSizePopup:
- case kTextSizeBox:
-
- DlgGetPString(dlg, kTextSizeBox, tempStr);
- StringToNum(tempStr, &num);
- if (num != 0 && num != gTextFontSize) {
- gTextFontSize = num;
- RedrawSample(dlg, kTextSample);
- }
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- PrintingFont
-
- Handles the printing font preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void PrintingFont (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- Str255 tempStr;
- long num;
-
- switch (item) {
-
- case kInit:
-
- gScreenFontsTopic = false;
- GetFontNumber(prefs->printingFont, &gPrintingFontID);
- gPrintingFontSize = prefs->printingSize;
- SetNewFont(dlg, true, gPrintingFontID);
- DlgSetNumber(dlg, kPrintingSizeBox, gPrintingFontSize);
- SetItemNumeric(dlg, kPrintingSizeBox);
- SetItemMaxLength(dlg, kPrintingSizeBox, 2);
- SelectDialogItemText(dlg, kPrintingSizeBox, 0, 0x7fff);
- SetItemPopupTypeinItem(dlg, kPrintingSizePopup, kPrintingSizeBox);
- DlgSetUserItem(dlg, kPrintingSample, gDrawFontSampleUPP);
- break;
-
- case kTerm:
-
- GetFontName(gPrintingFontID, prefs->printingFont);
- prefs->printingSize = gPrintingFontSize;
- break;
-
- case kPrintingFontPopup:
-
- gPrintingFontID = FontIDFromPopup(dlg, item);
- SetNewFont(dlg, true, gPrintingFontID);
- break;
-
- case kPrintingSizePopup:
- case kPrintingSizeBox:
-
- DlgGetPString(dlg, kPrintingSizeBox, tempStr);
- StringToNum(tempStr, &num);
- if (num != 0 && num != gPrintingFontSize) {
- gPrintingFontSize = num;
- RedrawSample(dlg, kPrintingSample);
- }
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- SavedUGL
-
- Handles the saved user group lists preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void SavedUGL (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- StandardFileReply reply;
- long dirID;
- Str31 name;
- OSErr err = noErr;
- CInfoPBRec pb;
- Boolean valid;
- AliasHandle alias;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kSavedUGLDirCheckBox, prefs->savedUGLDefaultFolder);
- DlgSetUserItem(dlg, kSavedUGLDirBorder, gDlgGrayBorderItemUPP);
- ValidateSavedFolderAlias(gPrefs.savedUGLDefaultFolderAlias,
- &pb.dirInfo.ioVRefNum, &pb.dirInfo.ioDrDirID, &valid);
- if (valid) {
- pb.dirInfo.ioNamePtr = name;
- pb.dirInfo.ioFDirIndex = -1;
- err = PBGetCatInfo(&pb, false);
- } else {
- *name = 0;
- }
- DlgSetPString(dlg, kSavedUGLDirName, name);
- DlgEnableItem(dlg, kSavedUGLDirButton, prefs->savedUGLDefaultFolder);
- DlgSetCheck(dlg, kSavedUGLAutoSaveOnQuit, prefs->autoSaveOnQuit);
-
- break;
-
- case kTerm:
-
- prefs->autoSaveOnQuit = DlgGetCheck(dlg, kSavedUGLAutoSaveOnQuit);
- break;
-
- case kSavedUGLDirCheckBox:
-
- DlgToggleCheck(dlg, item);
- prefs->savedUGLDefaultFolder = DlgGetCheck(dlg, item);
- DlgEnableItem(dlg, kSavedUGLDirButton, prefs->savedUGLDefaultFolder);
- break;
-
- case kSavedUGLDirButton:
-
- MyStandardGetDirectory(&reply, &dirID);
- if (!reply.sfGood) break;
- err = NewAlias(nil, &reply.sfFile, &alias);
- if (err == noErr) {
- MyDisposeHandle(prefs->savedUGLDefaultFolderAlias);
- prefs->savedUGLDefaultFolderAlias = alias;
- }
- DlgSetPString(dlg, kSavedUGLDirName, reply.sfFile.name);
- break;
-
- case kSavedUGLAutoSaveOnQuit:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- InvisibleFilesFilter
-
- A standard file dialog filter to filter out invisible files.
-
- Entry: pb = pointer to file info param block.
- myDataPtr = pointer to private data (not used).
-
- Exit: function result = true if file is invisible.
- ----------------------------------------------------------------------------*/
-
- static pascal Boolean InvisibleFilesFilter (CInfoPBPtr pb, void *myDataPtr)
- {
- return (pb->hFileInfo.ioFlFndrInfo.fdFlags & fInvisible) != 0;
- }
-
-
-
- /*----------------------------------------------------------------------------
- SavedArt
-
- Handles the saved articles preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void SavedArt (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- StandardFileReply reply;
- FInfo fInfo;
- long dirID;
- Str31 name;
- OSErr err = noErr;
- CInfoPBRec pb;
- Boolean valid;
- AliasHandle alias;
-
- switch (item) {
-
- case kInit:
-
- DlgSetUserItem(dlg, kSavedArtAppBorder, gDlgGrayBorderItemUPP);
- err = FindAppNameFromSig(prefs->savedArtCreator, name);
- if (err == noErr) {
- DlgSetPString(dlg, kSavedArtAppName, name);
- CopyPascalString(prefs->savedArtAppName, name);
- } else {
- DlgSetPString(dlg, kSavedArtAppName, prefs->savedArtAppName);
- }
- DlgSetCheck(dlg, kSavedArtDirCheckBox, prefs->savedArtDefaultFolder);
- DlgSetUserItem(dlg, kSavedArtDirBorder, gDlgGrayBorderItemUPP);
- ValidateSavedFolderAlias(gPrefs.savedArtDefaultFolderAlias,
- &pb.dirInfo.ioVRefNum, &pb.dirInfo.ioDrDirID, &valid);
- if (valid) {
- pb.dirInfo.ioNamePtr = name;
- pb.dirInfo.ioFDirIndex = -1;
- err = PBGetCatInfo(&pb, false);
- } else {
- *name = 0;
- }
- DlgSetPString(dlg, kSavedArtDirName, name);
- DlgEnableItem(dlg, kSavedArtDirButton, prefs->savedArtDefaultFolder);
- DlgSetCheck(dlg, kSavedArtSepFiles, prefs->saveThreadsToSeparateFiles);
- DlgSetCheck(dlg, kSavedArtAutoAppend, prefs->appendIfFileAlreadyExists);
- DlgSetCheck(dlg, kSavedArtSaveEncoded, prefs->saveEncodedText);
-
- break;
-
- case kTerm:
-
- prefs->saveThreadsToSeparateFiles = DlgGetCheck(dlg, kSavedArtSepFiles);
- prefs->appendIfFileAlreadyExists = DlgGetCheck(dlg, kSavedArtAutoAppend);
- prefs->saveEncodedText = DlgGetCheck(dlg, kSavedArtSaveEncoded);
- break;
-
- case kSavedArtAppButton:
-
- MyStandardGetFile(gInvisibleFilesFilterUPP, 2, "APPLadrp", &reply, nil);
- if (!reply.sfGood) break;
- FSpGetFInfo(&reply.sfFile, &fInfo);
- prefs->savedArtCreator = fInfo.fdCreator;
- CopyPascalString(prefs->savedArtAppName, reply.sfFile.name);
- DlgSetPString(dlg, kSavedArtAppName, prefs->savedArtAppName);
- break;
-
- case kSavedArtDirCheckBox:
-
- DlgToggleCheck(dlg, item);
- prefs->savedArtDefaultFolder = DlgGetCheck(dlg, item);
- DlgEnableItem(dlg, kSavedArtDirButton, prefs->savedArtDefaultFolder);
- break;
-
- case kSavedArtDirButton:
-
- MyStandardGetDirectory(&reply, &dirID);
- if (!reply.sfGood) break;
- err = NewAlias(nil, &reply.sfFile, &alias);
- if (err == noErr) {
- MyDisposeHandle(prefs->savedArtDefaultFolderAlias);
- prefs->savedArtDefaultFolderAlias = alias;
- }
- DlgSetPString(dlg, kSavedArtDirName, reply.sfFile.name);
- break;
-
- case kSavedArtSepFiles:
- case kSavedArtAutoAppend:
- case kSavedArtSaveEncoded:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- SavedMsg
-
- Handles the saved messages preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void SavedMsg (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- StandardFileReply reply;
- long dirID;
- Str31 name;
- OSErr err = noErr;
- CInfoPBRec pb;
- Boolean valid;
- AliasHandle alias;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kSavedMsgDirCheckBox, prefs->savedMsgDefaultFolder);
- DlgSetUserItem(dlg, kSavedMsgDirBorder, gDlgGrayBorderItemUPP);
- ValidateSavedFolderAlias(prefs->savedMsgDefaultFolderAlias,
- &pb.dirInfo.ioVRefNum, &pb.dirInfo.ioDrDirID, &valid);
- if (valid) {
- pb.dirInfo.ioNamePtr = name;
- pb.dirInfo.ioFDirIndex = -1;
- err = PBGetCatInfo(&pb, false);
- } else {
- *name = 0;
- }
- DlgSetPString(dlg, kSavedMsgDirName, name);
- DlgEnableItem(dlg, kSavedMsgDirButton, prefs->savedMsgDefaultFolder);
- DlgSetCheck(dlg, kSavedMsgDelAfterSend, prefs->savedMsgDelAfterSend);
-
- break;
-
- case kTerm:
-
- break;
-
- case kSavedMsgDirCheckBox:
-
- DlgToggleCheck(dlg, item);
- prefs->savedMsgDefaultFolder = DlgGetCheck(dlg, item);
- DlgEnableItem(dlg, kSavedMsgDirButton, prefs->savedMsgDefaultFolder);
- break;
-
- case kSavedMsgDirButton:
-
- MyStandardGetDirectory(&reply, &dirID);
- if (!reply.sfGood) break;
- err = NewAlias(nil, &reply.sfFile, &alias);
- if (err == noErr) {
- MyDisposeHandle(prefs->savedMsgDefaultFolderAlias);
- prefs->savedMsgDefaultFolderAlias = alias;
- }
- DlgSetPString(dlg, kSavedMsgDirName, reply.sfFile.name);
- break;
-
- case kSavedMsgDelAfterSend:
-
- DlgToggleCheck(dlg, item);
- prefs->savedMsgDelAfterSend = DlgGetCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- InitURLHelperField
-
- Initialize a URL helper field.
-
- Entry: dlg = pointer to dialog.
- borderItem = item number of gray border.
- appNameItem = item number of application name.
- info = pointer to prefs URL helper info.
- ----------------------------------------------------------------------------*/
-
- static void InitURLHelperField (DialogPtr dlg, short borderItem,
- short appNameItem, TURLHelperInfoPtr info)
- {
- OSErr err = noErr;
- Str31 name;
-
- DlgSetUserItem(dlg, borderItem, gDlgGrayBorderItemUPP);
- err = FindAppNameFromSig(info->sig, name);
- if (err != noErr) {
- info->sig = 0;
- *name = 0;
- }
- DlgSetPString(dlg, appNameItem, name);
- }
-
-
-
- /*----------------------------------------------------------------------------
- SetNewURLHelper
-
- Set a new URL helper.
-
- Entry: dlg = pointer to dialog.
- appNameItem = item number of application name.
- info = pointer to prefs URL helper info.
- ----------------------------------------------------------------------------*/
-
- static void SetNewURLHelper (DialogPtr dlg, short appNameItem,
- TURLHelperInfoPtr info)
- {
- StandardFileReply reply;
-
- MyStandardGetFile(gInvisibleFilesFilterUPP, 2, "APPLadrp", &reply, nil);
- if (!reply.sfGood) return;
-
- if (!ValidHelper(&reply.sfFile)) return;
-
- if (ValidURLHelper(&reply.sfFile, info))
- DlgSetPString(dlg, appNameItem, reply.sfFile.name);
- }
-
-
-
- /*----------------------------------------------------------------------------
- URLHelpers1
-
- Handles the URL helper programs 1 preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void URLHelpers1 (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- switch (item) {
-
- case kInit:
-
- InitURLHelperField(dlg, kFTPAppBorder, kFTPAppName,
- &prefs->ftpHelperInfo);
- InitURLHelperField(dlg, kHTTPAppBorder, kHTTPAppName,
- &prefs->httpHelperInfo);
- InitURLHelperField(dlg, kGopherAppBorder, kGopherAppName,
- &prefs->gopherHelperInfo);
- InitURLHelperField(dlg, kWAISAppBorder, kWAISAppName,
- &prefs->waisHelperInfo);
- break;
-
- case kTerm:
-
- break;
-
- case kFTPAppButton:
-
- SetNewURLHelper(dlg, kFTPAppName, &prefs->ftpHelperInfo);
- break;
-
- case kHTTPAppButton:
-
- SetNewURLHelper(dlg, kHTTPAppName, &prefs->httpHelperInfo);
- break;
-
- case kGopherAppButton:
-
- SetNewURLHelper(dlg, kGopherAppName, &prefs->gopherHelperInfo);
- break;
-
- case kWAISAppButton:
-
- SetNewURLHelper(dlg, kWAISAppName, &prefs->waisHelperInfo);
- break;
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- URLHelpers2
-
- Handles the URL helper programs 2 preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void URLHelpers2 (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- switch (item) {
-
- case kInit:
-
- InitURLHelperField(dlg, kTelnetAppBorder, kTelnetAppName,
- &prefs->telnetHelperInfo);
- InitURLHelperField(dlg, ktn3270AppBorder, ktn3270AppName,
- &prefs->tn3270HelperInfo);
- InitURLHelperField(dlg, kFingerAppBorder, kFingerAppName,
- &prefs->fingerHelperInfo);
- InitURLHelperField(dlg, kWhoisAppBorder, kWhoisAppName,
- &prefs->whoisHelperInfo);
- break;
-
- case kTerm:
-
- break;
-
- case kTelnetAppButton:
-
- SetNewURLHelper(dlg, kTelnetAppName, &prefs->telnetHelperInfo);
- break;
-
- case ktn3270AppButton:
-
- SetNewURLHelper(dlg, ktn3270AppName, &prefs->tn3270HelperInfo);
- break;
-
- case kFingerAppButton:
-
- SetNewURLHelper(dlg, kFingerAppName, &prefs->fingerHelperInfo);
- break;
-
- case kWhoisAppButton:
-
- SetNewURLHelper(dlg, kWhoisAppName, &prefs->whoisHelperInfo);
- break;
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Auth
-
- Handles the authorization preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Auth (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- CStr255 tempStr;
- short len;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCString(dlg, kAuthUsername, prefs->authUsername);
- SetItemUSAsciiNoBlank(dlg, kAuthUsername);
- SetItemMaxLength(dlg, kAuthUsername, 31);
- len = strlen(prefs->authPassword);
- memset(tempStr, '•', len);
- tempStr[len] = 0;
- DlgSetCString(dlg, kAuthPassword, tempStr);
- SetItemPassword(dlg, kAuthPassword, prefs->authPassword);
- SetItemMaxLength(dlg, kAuthPassword, 31);
- DlgSetCheck(dlg, kAuthSavePassword, prefs->authSavePassword);
- DlgSetCheck(dlg, kAuthPrivateGroups, prefs->authPrivateGroups);
- DlgSetCtlValue(dlg, prefs->authAtStartup ? kAuthAtStartup :
- kAuthWhenRequested, 1);
- if (*prefs->authUsername == 0) {
- SelectDialogItemText(dlg, kAuthUsername, 0, 0);
- } else if (*prefs->authPassword == 0) {
- SelectDialogItemText(dlg, kAuthPassword, 0, 0);
- } else {
- SelectDialogItemText(dlg, kAuthUsername, 0, 0x7fff);
- }
- break;
-
- case kTerm:
-
- DlgGetCString(dlg, kAuthUsername, prefs->authUsername);
- prefs->authSavePassword = DlgGetCheck(dlg, kAuthSavePassword);
- prefs->authPrivateGroups = DlgGetCheck(dlg, kAuthPrivateGroups);
- prefs->authAtStartup = DlgGetCtlValue(dlg, kAuthAtStartup) == 1;
- break;
-
- case kAuthSavePassword:
- case kAuthPrivateGroups:
-
- DlgToggleCheck(dlg, item);
- break;
-
- case kAuthAtStartup:
-
- if (DlgGetCtlValue(dlg, kAuthAtStartup) == 0) {
- DlgSetCtlValue(dlg, kAuthAtStartup, 1);
- DlgSetCtlValue(dlg, kAuthWhenRequested, 0);
- }
- break;
-
- case kAuthWhenRequested:
-
- if (DlgGetCtlValue(dlg, kAuthWhenRequested) == 0) {
- DlgSetCtlValue(dlg, kAuthWhenRequested, 1);
- DlgSetCtlValue(dlg, kAuthAtStartup, 0);
- }
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- Extract
-
- Handles the extracting binaries preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void Extract (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- StandardFileReply reply;
- FInfo fInfo;
- long dirID;
- Str31 name;
- OSErr err = noErr;
- CInfoPBRec pb;
- Boolean valid;
- AliasHandle alias;
-
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kSavedBinDirCheckBox, prefs->savedBinDefaultFolder);
- DlgSetUserItem(dlg, kSavedBinDirBorder, gDlgGrayBorderItemUPP);
- ValidateSavedFolderAlias(prefs->savedBinDefaultFolderAlias,
- &pb.dirInfo.ioVRefNum, &pb.dirInfo.ioDrDirID, &valid);
- if (valid) {
- pb.dirInfo.ioNamePtr = name;
- pb.dirInfo.ioFDirIndex = -1;
- err = PBGetCatInfo(&pb, false);
- } else {
- *name = 0;
- }
- DlgSetPString(dlg, kSavedBinDirName, name);
- DlgEnableItem(dlg, kSavedBinDirButton, prefs->savedBinDefaultFolder);
-
- DlgSetUserItem(dlg, kHqxAppBorder, gDlgGrayBorderItemUPP);
- err = FindAppNameFromSig(prefs->hqxHelper, name);
- if (err == noErr) {
- DlgSetPString(dlg, kHqxAppName, name);
- CopyPascalString(prefs->hqxHelperName, name);
- } else {
- DlgSetPString(dlg, kHqxAppName, prefs->hqxHelperName);
- }
-
- DlgSetUserItem(dlg, kUUAppBorder, gDlgGrayBorderItemUPP);
- err = FindAppNameFromSig(prefs->uuHelper, name);
- if (err == noErr) {
- DlgSetPString(dlg, kUUAppName, name);
- CopyPascalString(prefs->uuHelperName, name);
- } else {
- DlgSetPString(dlg, kUUAppName, prefs->uuHelperName);
- }
-
- break;
-
- case kTerm:
-
- break;
-
- case kSavedBinDirCheckBox:
-
- DlgToggleCheck(dlg, item);
- prefs->savedBinDefaultFolder = DlgGetCheck(dlg, item);
- DlgEnableItem(dlg, kSavedBinDirButton, prefs->savedBinDefaultFolder);
- break;
-
- case kSavedBinDirButton:
-
- MyStandardGetDirectory(&reply, &dirID);
- if (!reply.sfGood) break;
- err = NewAlias(nil, &reply.sfFile, &alias);
- if (err == noErr) {
- MyDisposeHandle(prefs->savedBinDefaultFolderAlias);
- prefs->savedBinDefaultFolderAlias = alias;
- }
- DlgSetPString(dlg, kSavedBinDirName, reply.sfFile.name);
- break;
-
- case kHqxAppButton:
-
- MyStandardGetFile(gInvisibleFilesFilterUPP, 2, "APPLadrp", &reply, nil);
- if (!reply.sfGood) break;
- if (!ValidHelper(&reply.sfFile)) break;
- FSpGetFInfo(&reply.sfFile, &fInfo);
- prefs->hqxHelper = fInfo.fdCreator;
- CopyPascalString(prefs->hqxHelperName, reply.sfFile.name);
- DlgSetPString(dlg, kHqxAppName, prefs->hqxHelperName);
- break;
-
- case kUUAppButton:
-
- MyStandardGetFile(gInvisibleFilesFilterUPP, 2, "APPLadrp", &reply, nil);
- if (!reply.sfGood) break;
- if (!ValidHelper(&reply.sfFile)) break;
- FSpGetFInfo(&reply.sfFile, &fInfo);
- prefs->uuHelper = fInfo.fdCreator;
- CopyPascalString(prefs->uuHelperName, reply.sfFile.name);
- DlgSetPString(dlg, kUUAppName, prefs->uuHelperName);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- MiscOptions
-
- Handle the miscellaneous options preferences dialog.
-
- Entry: prefs = pointer to new prefs.
- dlg = pointer to dialog.
- item = item number hit.
- ----------------------------------------------------------------------------*/
-
- static void MiscOptions (TPrefRec *prefs, DialogPtr dlg, short item)
- {
- switch (item) {
-
- case kInit:
-
- DlgSetCheck(dlg, kReZoomWindows, prefs->reZoomWindows);
- DlgSetCheck(dlg, kCheckNewGroups, prefs->checkForNewGroups);
- DlgSetCheck(dlg, kAreYouSure, prefs->areYouSureAlert);
- DlgSetCheck(dlg, kLogActionsToFile, prefs->logActionsToFile);
- DlgSetCheck(dlg, kDontCoverFinderIcons, prefs->dontCoverFinderIcons);
- DlgSetCheck(dlg, kUseInternetConfig, prefs->useInternetConfig);
- break;
-
- case kTerm:
-
- prefs->reZoomWindows = DlgGetCheck(dlg, kReZoomWindows);
- prefs->checkForNewGroups = DlgGetCheck(dlg, kCheckNewGroups);
- prefs->areYouSureAlert = DlgGetCheck(dlg, kAreYouSure);
- prefs->logActionsToFile = DlgGetCheck(dlg, kLogActionsToFile);
- prefs->dontCoverFinderIcons = DlgGetCheck(dlg, kDontCoverFinderIcons);
- prefs->useInternetConfig = DlgGetCheck(dlg, kUseInternetConfig);
- break;
-
- case kReZoomWindows:
- case kCheckNewGroups:
- case kAreYouSure:
- case kLogActionsToFile:
- case kDontCoverFinderIcons:
- case kUseInternetConfig:
-
- DlgToggleCheck(dlg, item);
- break;
-
- }
- }
-
-
-
- /*----------------------------------------------------------------------------
- DrawGrayOutline
-
- A user item procedure to draw the gray outline.
-
- Entry: dlg = pointer to dialog.
- item = item number of gray outline user item.
- ----------------------------------------------------------------------------*/
-
- static pascal void DrawGrayOutline (DialogPtr dlg, short item)
- {
- Handle itemHandle;
- ControlHandle popupCtl;
- short itemType;
- Rect box, popupBox, r;
-
- GetDialogItem(dlg, item, &itemType, &itemHandle, &box);
- GetDialogItem(dlg, kTopicPopup, &itemType, (Handle*)&popupCtl, &popupBox);
- popupBox = (**popupCtl).contrlRect;
- r = box;
- r.bottom = r.top + 1;
- r.right = popupBox.left - 1;
- DrawGrayRect(&r);
- r = box;
- r.bottom = r.top + 1;
- r.left = popupBox.right + 5;
- DrawGrayRect(&r);
- r = box;
- r.right = r.left + 1;
- DrawGrayRect(&r);
- r = box;
- r.left = r.right - 1;
- DrawGrayRect(&r);
- r = box;
- r.top = r.bottom - 1;
- DrawGrayRect(&r);
- }
-
-
-
- /*----------------------------------------------------------------------------
- DoPreferences
-
- Presents the Preferences dialog.
-
- Exit: function result = error code.
- ----------------------------------------------------------------------------*/
-
- OSErr DoPreferences (void)
- {
- typedef void (*prefsFuncPtr) (TPrefRec *prefs, DialogPtr dlg, short item);
-
- static prefsFuncPtr prefsFuncPtrs[] = {
- NewsreadingOptions,
- Server,
- ServerOptions,
- Personal,
- Signature,
- MessageOptions,
- ExtraHeaderLines,
- Remote,
- ScreenFonts,
- PrintingFont,
- SavedUGL,
- SavedArt,
- SavedMsg,
- URLHelpers1,
- URLHelpers2,
- Auth,
- Extract,
- MiscOptions,
- };
-
- static short curTopic = kNewsreadingOptions;
-
- short newTopic;
- prefsFuncPtr theFunc;
- TPrefRec *prefs = nil;
- DialogPtr dlg = nil;
- short item;
- Boolean reauthenticate = false;
- Handle theDITL;
- Point newLocn;
- OSErr err = noErr;
- GrafPtr port;
-
- GetPort(&port);
-
- MyICReadSharedPrefs(kICAllSharedPrefs);
- err = MyNewPtr(sizeof(TPrefRec), &prefs);
- if (err != noErr) goto exit;
- *prefs = gPrefs;
- if (prefs->savedMsgDefaultFolderAlias != nil) {
- err = MyHandToHand(&prefs->savedMsgDefaultFolderAlias);
- if (err != noErr) {
- prefs->savedMsgDefaultFolderAlias = nil;
- prefs->savedArtDefaultFolderAlias = nil;
- prefs->savedBinDefaultFolderAlias = nil;
- prefs->savedUGLDefaultFolderAlias = nil;
- goto exit;
- }
- }
- if (prefs->savedArtDefaultFolderAlias != nil) {
- err = MyHandToHand(&prefs->savedArtDefaultFolderAlias);
- if (err != noErr) {
- prefs->savedArtDefaultFolderAlias = nil;
- prefs->savedBinDefaultFolderAlias = nil;
- prefs->savedUGLDefaultFolderAlias = nil;
- goto exit;
- }
- }
- if (prefs->savedBinDefaultFolderAlias != nil) {
- err = MyHandToHand(&prefs->savedBinDefaultFolderAlias);
- if (err != noErr) {
- prefs->savedBinDefaultFolderAlias = nil;
- prefs->savedUGLDefaultFolderAlias = nil;
- goto exit;
- }
- }
- if (prefs->savedUGLDefaultFolderAlias != nil) {
- err = MyHandToHand(&prefs->savedUGLDefaultFolderAlias);
- if (err != noErr) {
- prefs->savedUGLDefaultFolderAlias = nil;
- goto exit;
- }
- }
-
- err = MyGetNewDialog(kPrefsDlg, ok, cancel, &dlg);
- if (err != noErr) goto exit;
- SetPort(dlg);
- RestoreMovableModalDialogPosition(dlg, gPrefs.prefsLoc);
-
- for (item = kFirstGrayLine; item <= kLastGrayLine; item++)
- DlgSetUserItem(dlg, item, gDlgGrayBorderItemUPP);
- if (curTopic == kScreenFonts || curTopic == kPrintingFont) SetCursor(&gWatchCurs);
- err = MyGetResource('DITL', kPrefsDlg + curTopic, &theDITL);
- if (err == noErr) err = MyAppendDITL(dlg, theDITL, overlayDITL);
- InitCursor();
- if (err != noErr) goto exit;
- MyReleaseResource(theDITL);
- DlgSetCtlValue(dlg, kTopicPopup, curTopic);
- theFunc = prefsFuncPtrs[curTopic - 1];
- (*theFunc)(prefs, dlg, kInit);
- DlgSetDefaultButtonOutline(dlg, curTopic != kSignature && curTopic != kExtraHeaderLines);
-
- while (true) {
- MyMovableModalDialog(dlg, DialogFilter, &item);
- if (item == ok || item == cancel) {
- (*theFunc)(prefs, dlg, kTerm);
- break;
- } else if (item == kTopicPopup) {
- newTopic = DlgGetCtlValue(dlg, kTopicPopup);
- if (newTopic != curTopic) {
- (*theFunc)(prefs, dlg, kTerm);
- curTopic = newTopic;
- MyShortenDITL(dlg, CountDITL(dlg) - kCommonItems);
- if (curTopic == kScreenFonts || curTopic == kPrintingFont) SetCursor(&gWatchCurs);
- err = MyGetResource('DITL', kPrefsDlg + curTopic, &theDITL);
- if (err == noErr) err = MyAppendDITL(dlg, theDITL, overlayDITL);
- InitCursor();
- if (err != noErr) goto exit;
- MyReleaseResource(theDITL);
- theFunc = prefsFuncPtrs[curTopic - 1];
- (*theFunc)(prefs, dlg, kInit);
- DlgSetDefaultButtonOutline(dlg,
- curTopic != kSignature && curTopic != kExtraHeaderLines);
- }
- } else {
- (*theFunc)(prefs, dlg, item);
- }
- }
-
- SaveMovableModalDialogPosition(dlg, &newLocn);
-
- err = DoClose(dlg);
- if (err != noErr) goto exit;
-
- if (item == ok) {
- if (prefs->logActionsToFile && !gPrefs.logActionsToFile) {
- OpenLogFile();
- } else if (!prefs->logActionsToFile && gPrefs.logActionsToFile) {
- CloseLogFile();
- }
- if (!EqualString(prefs->newsServerName, gPrefs.newsServerName, false, true)) {
- NoteMessageNumber(kStrMustRestart);
- }
- if (prefs->useInternetConfig != gPrefs.useInternetConfig) {
- NoteMessageNumber(kStrMustRestartIC);
- }
- reauthenticate = strcmp(prefs->authUsername, gPrefs.authUsername) != 0 ||
- strcmp(prefs->authPassword, gPrefs.authPassword) != 0 ||
- prefs->authAtStartup && !gPrefs.authAtStartup;
- MyDisposeHandle(gPrefs.savedMsgDefaultFolderAlias);
- MyDisposeHandle(gPrefs.savedArtDefaultFolderAlias);
- MyDisposeHandle(gPrefs.savedBinDefaultFolderAlias);
- MyDisposeHandle(gPrefs.savedUGLDefaultFolderAlias);
- gPrefs = *prefs;
- MyICWriteSharedPrefs(kICAllSharedPrefs);
- ResetNewsServerOptions();
- AdjustExtractBinariesCommand();
- } else {
- MyDisposeHandle(prefs->savedMsgDefaultFolderAlias);
- MyDisposeHandle(prefs->savedArtDefaultFolderAlias);
- MyDisposeHandle(prefs->savedBinDefaultFolderAlias);
- MyDisposeHandle(prefs->savedUGLDefaultFolderAlias);
- }
- MyDisposePtr(prefs);
- prefs = nil;
- gPrefs.prefsLoc = newLocn;
- if (reauthenticate && gStartupOK) {
- err = ReAuthenticate();
- if (err != noErr) goto exit;
- if (gPrefs.authPrivateGroups) {
- err = DoRebuildFullGroupList();
- if (err != noErr) goto exit;
- }
- }
- SetPort(port);
- return noErr;
-
- exit:
-
- if (prefs != nil) {
- MyDisposeHandle(prefs->savedMsgDefaultFolderAlias);
- MyDisposeHandle(prefs->savedArtDefaultFolderAlias);
- MyDisposeHandle(prefs->savedBinDefaultFolderAlias);
- MyDisposeHandle(prefs->savedUGLDefaultFolderAlias);
- MyDisposePtr(prefs);
- }
- SetPort(port);
- return err;
- }
-
-
-
- /*----------------------------------------------------------------------------
- prefsdlog_InitUPP
-
- Initialize UPPs.
- ----------------------------------------------------------------------------*/
-
- void prefsdlog_InitUPP (void)
- {
- gInvisibleFilesFilterUPP = NewFileFilterYDProc(InvisibleFilesFilter);
- gDrawFontSampleUPP = NewUserItemProc(DrawFontSample);
- }